package com.ynu.yx.chatroleai.utils;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

// MyMetaObjectHandler 类用于在使用 MyBatis-Plus 时自动填充实体类的字段。
// 它实现了 MetaObjectHandler 接口，通过重写 insertFill 和 updateFill 方法，在插入和更新数据库记录时，自动为如 createdAt 和 updatedAt 这样的时间字段赋值，减少手动设置的重复代码。
// @Component 注解让它被 Spring 容器自动管理
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 插入时
        this.strictInsertFill(metaObject, "createdAt", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 1. 普通更新时间
        this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());

        // 2. 逻辑删除时间：只有 deletedAt == null 才写入
        //    strictUpdateFill 内部会判断，已 set 过值就直接跳过
        // this.strictUpdateFill(metaObject, "deletedAt", LocalDateTime.class, LocalDateTime.now());
    }

}
